home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / T U R B O Language / Turbo Pascal V7.0 / SOURCE.ZIP / MSGBOX.PAS < prev    next >
Pascal/Delphi Source File  |  1992-10-30  |  6KB  |  178 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 7.0                        }
  5. {       Turbo Vision Unit                               }
  6. {                                                       }
  7. {       Copyright (c) 1992 Borland International        }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit MsgBox;
  12.  
  13. {$O+,F+,X+,I-,S-}
  14.  
  15. interface
  16.  
  17. uses Objects;
  18.  
  19. const
  20.  
  21. { Message box classes }
  22.  
  23.   mfWarning      = $0000;       { Display a Warning box }
  24.   mfError        = $0001;       { Dispaly a Error box }
  25.   mfInformation  = $0002;       { Display an Information Box }
  26.   mfConfirmation = $0003;       { Display a Confirmation Box }
  27.  
  28.   mfInsertInApp  = $0080;       { Insert message box into application }
  29.                                 { instead of the Desktop }
  30.  
  31. { Message box button flags }
  32.  
  33.   mfYesButton    = $0100;       { Put a Yes button into the dialog }
  34.   mfNoButton     = $0200;       { Put a No button into the dialog }
  35.   mfOKButton     = $0400;       { Put an OK button into the dialog }
  36.   mfCancelButton = $0800;       { Put a Cancel button into the dialog }
  37.  
  38.   mfYesNoCancel  = mfYesButton + mfNoButton + mfCancelButton;
  39.                                 { Standard Yes, No, Cancel dialog }
  40.   mfOKCancel     = mfOKButton + mfCancelButton;
  41.                                 { Standard OK, Cancel dialog }
  42.  
  43. { MessageBox displays the given string in a standard sized      }
  44. { dialog box. Before the dialog is displayed the Msg and Params }
  45. { are passed to FormatStr.  The resulting string is displayed   }
  46. { as a TStaticText view in the dialog.                          }
  47.  
  48. function MessageBox(const Msg: String; Params: Pointer;
  49.   AOptions: Word): Word;
  50.  
  51. { MessageBoxRec allows the specification of a TRect for the     }
  52. { message box to occupy.                                        }
  53.  
  54. function MessageBoxRect(var R: TRect; const Msg: String; Params: Pointer;
  55.   AOptions: Word): Word;
  56.  
  57. { InputBox displays a simple dialog that allows the user to     }
  58. { type in a string.                                             }
  59.  
  60. function InputBox(const Title, ALabel: String; var S: String;
  61.   Limit: Byte): Word;
  62.  
  63. { InputBoxRect is like InputBox but allows the specification of }
  64. { a rectangle.                                                  }
  65.  
  66. function InputBoxRect(var Bounds: TRect; const Title, ALabel: String;
  67.   var S: String;  Limit: Byte): Word;
  68.  
  69. implementation
  70.  
  71. uses Drivers, Views, Dialogs, App;
  72.  
  73. function MessageBox(const Msg: String; Params: Pointer;
  74.   AOptions: Word): Word;
  75. var
  76.   R: TRect;
  77. begin
  78.   R.Assign(0, 0, 40, 9);
  79.   if AOptions and mfInsertInApp = 0 then
  80.     R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2)
  81.   else R.Move((Application^.Size.X - R.B.X) div 2, (Application^.Size.Y - R.B.Y) div 2);
  82.   MessageBox := MessageBoxRect(R, Msg, Params, AOptions);
  83. end;
  84.  
  85. function MessageBoxRect(var R: TRect; const Msg: String; Params: Pointer;
  86.   AOptions: Word): Word;
  87. const
  88.   ButtonName: array[0..3] of string[6] =
  89.     ('~Y~es', '~N~o', 'O~K~', 'Cancel');
  90.   Commands: array[0..3] of word =
  91.     (cmYes, cmNo, cmOK, cmCancel);
  92.   Titles: array[0..3] of string[11] =
  93.     ('Warning','Error','Information','Confirm');
  94. var
  95.   I, X, ButtonCount: Integer;
  96.   Dialog: PDialog;
  97.   Control: PView;
  98.   ButtonList: array[0..4] of PView;
  99.   S: String;
  100. begin
  101.   Dialog := New(PDialog,
  102.     Init(R, Titles[AOptions and $3]));
  103.   with Dialog^ do
  104.   begin
  105.     R.Assign(3, 2, Size.X - 2, Size.Y - 3);
  106.     FormatStr(S, Msg, Params^);
  107.     Control := New(PStaticText, Init(R, S));
  108.     Insert(Control);
  109.     X := -2;
  110.     ButtonCount := 0;
  111.     for I := 0 to 3 do
  112.       if AOptions and ($0100 shl I) <> 0 then
  113.       begin
  114.         R.Assign(0, 0, 10, 2);
  115.         Control := New(PButton, Init(R, ButtonName[I], Commands[i],
  116.           bfNormal));
  117.         Inc(X, Control^.Size.X + 2);
  118.         ButtonList[ButtonCount] := Control;
  119.         Inc(ButtonCount);
  120.       end;
  121.     X := (Size.X - X) shr 1;
  122.     for I := 0 to ButtonCount - 1 do
  123.     begin
  124.       Control := ButtonList[I];
  125.       Insert(Control);
  126.       Control^.MoveTo(X, Size.Y - 3);
  127.       Inc(X, Control^.Size.X + 2);
  128.     end;
  129.     SelectNext(False);
  130.   end;
  131.   if AOptions and mfInsertInApp = 0 then
  132.     MessageBoxRect := DeskTop^.ExecView(Dialog)
  133.   else MessageBoxRect := Application^.ExecView(Dialog);
  134.   Dispose(Dialog, Done);
  135. end;
  136.  
  137. function InputBox(const Title, ALabel: String; var S: String;
  138.   Limit: Byte): Word;
  139. var
  140.   R: TRect;
  141. begin
  142.   R.Assign(0, 0, 60, 8);
  143.   R.Move((Desktop^.Size.X - R.B.X) div 2, (Desktop^.Size.Y - R.B.Y) div 2);
  144.   InputBox := InputBoxRect(R, Title, ALabel, S, Limit);
  145. end;
  146.  
  147. function InputBoxRect(var Bounds: TRect; const Title, ALabel: String;
  148.   var S: String;  Limit: Byte): Word;
  149. var
  150.   Dialog: PDialog;
  151.   Control: PView;
  152.   R: TRect;
  153.   C: Word;
  154. begin
  155.   Dialog := New(PDialog, Init(Bounds, Title));
  156.   with Dialog^ do
  157.   begin
  158.     R.Assign(4 + CStrLen(ALabel), 2, Size.X - 3, 3);
  159.     Control := New(PInputLine, Init(R, Limit));
  160.     Insert(Control);
  161.     R.Assign(2, 2, 3 + CStrLen(ALabel), 3);
  162.     Insert(New(PLabel, Init(R, ALabel, Control)));
  163.     R.Assign(Size.X - 24, Size.Y - 4, Size.X - 14, Size.Y - 2);
  164.     Insert(New(PButton, Init(R, 'O~K~', cmOk, bfDefault)));
  165.     Inc(R.A.X, 12); Inc(R.B.X, 12);
  166.     Insert(New(PButton, Init(R, 'Cancel', cmCancel, bfNormal)));
  167.     Inc(R.A.X, 12); Inc(R.B.X, 12);
  168.     SelectNext(False);
  169.   end;
  170.   Dialog^.SetData(S);
  171.   C := DeskTop^.ExecView(Dialog);
  172.   if C <> cmCancel then Dialog^.GetData(S);
  173.   Dispose(Dialog, Done);
  174.   InputBoxRect := C;
  175. end;
  176.  
  177. end.
  178.